
        <html>
			<head>
			     <title>如何控制开放HTTPS服务的weblogic服务器 - z_zz_zzz</title>
				 <meta http-equiv="content-type" content="text/html; charset=UTF-8">
			</head>
			<body>
				<h1>原文地址:<a href="http://drops.wooyun.org/web/13681">http://drops.wooyun.org/web/13681</a></h1>
				
      <p>
        <h1>0x00 前言</h1>

<hr />

<p>目前在公开途径还没有看到利用JAVA反序列化漏洞控制开放HTTPS服务的weblogic服务器的方法，已公布的利用工具都只能控制开放HTTP服务的weblogic服务器。我们来分析一下如何利用JAVA反序列化漏洞控制开放HTTPS服务的weblogic服务器，以及相应的防护方法。</p>

<p>建议先参考<a href="http://drops.wooyun.org/web/13470" title="修复weblogic的JAVA反序列化漏洞的多种方法">修复weblogic的JAVA反序列化漏洞的多种方法</a>中关于weblogic的JAVA反序列化漏洞的分析。</p>

<!--more-->

<h1>0x01 HTTPS服务的架构分析</h1>

<hr />

<p>如果某服务器需要对公网用户提供HTTPS服务，可以在不同的层次实现。</p>

<h3>使用SSL网关提供HTTPS服务</h3>

<p>当使用SSL网关提供HTTPS服务时，网络架构如下图所示（无关的设备已省略，下同）。</p>

<p><img src="http://static.wooyun.org//drops/20160315/2016031506270430725120.png" alt="" /></p>

<p>SSL网关只会向后转发HTTP协议的数据，不会将T3协议数据转发至weblogic服务器，因此在该场景中，无法通过公网利用weblogic的JAVA反序列化漏洞。</p>

<h3>使用负载均衡提供HTTPS服务</h3>

<p>当使用负载均衡提供HTTPS服务时，网络架构如下图所示。</p>

<p><img src="http://static.wooyun.org//drops/20160315/2016031506270762671218.png" alt="" /></p>

<p>安全起见，负载均衡应选择转发HTTP协议而不是TCP协议，因此在该场景中，也无法通过公网利用weblogic的JAVA反序列化漏洞。</p>

<h3>使用web代理提供HTTPS服务</h3>

<p>当使用web代理（如apache、nginx等）提供HTTPS服务时，网络架构如下图所示。</p>

<p><img src="http://static.wooyun.org//drops/20160315/2016031506270966469318.png" alt="" /></p>

<p>web代理只会向后转发HTTP协议的数据，因此在该场景中，也无法通过公网利用weblogic的JAVA反序列化漏洞。</p>

<h3>使用weblogic提供HTTPS服务</h3>

<p>当使用weblogic提供HTTPS服务时，网络架构如下图所示。</p>

<p><img src="http://static.wooyun.org//drops/20160315/201603150627104999948.png" alt="" /></p>

<p>weblogic能够接收到利用SSL加密后的T3协议数据，因此在该场景中，通过公网能够利用weblogic的JAVA反序列化漏洞。</p>

<p><strong>根据上述分析，仅当HTTPS服务由weblogic提供时，才能够利用其JAVA反序列化漏洞。</strong></p>

<h1>0x02 weblogic开放SSL服务时的T3协议格式分析</h1>

<hr />

<p>利用weblogic的JAVA反序列化漏洞时，必须向weblogic发送T3协议头。为了能够利用提供SSL服务的weblogic的JAVA反序列化漏洞，需要首先分析当weblogic提供SSL服务时的T3协议格式。</p>

<p>SSL数据包为加密的形式，无法直接进行分析，需要进行解密。当已知SSL私钥时，可以利用Wireshark对SSL通信数据进行解密。</p>

<p>weblogic可以使用演示SSL证书提供SSL服务，也可以使用指定SSL证书提供SSL服务。</p>

<p>可以使用两种方法进行分析，一是使用weblogic提供的演示SSL证书进行分析，二是使用自己生成的SSL证书进行分析。</p>

<h3>使用weblogic演示证书进行分析(方法一)</h3>

<p><strong>使用weblogic演示证书开放SSL服务</strong></p>

<p>登录weblogic控制台，将AdminServer的“启用SSL监听端口”钩选，并填入SSL监听端口号。</p>

<p><img src="http://static.wooyun.org//drops/20160315/201603150627123087556.png" alt="" /></p>

<p>查看AdminServer的密钥库配置，确认为“演示标识和演示信任”（Demo Identity and Demo Trust），可以看到演示密钥库的文件名为“DemoIdentity.jks”，演示信任密钥库文件名为“DemoTrust.jks”。</p>

<p><img src="http://static.wooyun.org//drops/20160315/201603150627136815966.png" alt="" /></p>

<p>查看AdminServer的SSL配置，可以看到演示密钥库的私钥别名为“DemoIdentity”。</p>

<p><img src="http://static.wooyun.org//drops/20160315/201603150627152311076.png" alt="" /></p>

<p>使用HTTPS方式登录weblogic控制台，确认可以正常登录。</p>

<p><strong>生成weblogic演示证书的私钥文件</strong></p>

<p>以下为weblogic演示密钥库的密码信息。</p>

<table>
  <tr>
    <td>
      Property
    </td>
    
    <td>
      Value
    </td>
  </tr>
  
  <tr>
    <td>
      Trust store location
    </td>
    
    <td>
      DemoTrust.jks文件，可在控制台查看
    </td>
  </tr>
  
  <tr>
    <td>
      Trust store password
    </td>
    
    <td>
      DemoTrustKeyStorePassPhrase
    </td>
  </tr>
  
  <tr>
    <td>
      Key store location
    </td>
    
    <td>
      DemoIdentity.jks文件，可在控制台查看
    </td>
  </tr>
  
  <tr>
    <td>
      Key store password
    </td>
    
    <td>
      DemoIdentityKeyStorePassPhrase
    </td>
  </tr>
  
  <tr>
    <td>
      Private key password
    </td>
    
    <td>
      DemoIdentityPassPhrase
    </td>
  </tr>
  
  <tr>
    <td>
      Private Key Alias
    </td>
    
    <td>
      DemoIdentity，可在控制台查看
    </td>
  </tr>
</table>

<p>使用以下命令生成weblogic演示密钥库的私钥文件。</p>

<pre><code>#!bash
set keystore=DemoIdentity.jks
set tmp_p12=tmp.p12

set storepass=DemoIdentityKeyStorePassPhrase
set keypass=DemoIdentityPassPhrase
set alias=DemoIdentity
set pwd_new=123456

keytool -importkeystore -srckeystore %keystore% -destkeystore %tmp_p12% -srcstoretype JKS -deststoretype PKCS12 -srcstorepass %storepass% -deststorepass %pwd_new% -srcalias %alias% -destalias %alias% -srckeypass %keypass% -destkeypass %pwd_new%

set out_pem=tmp.rsa.pem
set final_pem=final.key

openssl pkcs12 -in %tmp_p12% -nodes -out %out_pem% -passin pass:%pwd_new%
openssl rsa -in %out_pem% -check &gt; %final_pem% 
</code></pre>

<p>最终生成的final.key即为weblogic演示密钥库的私钥文件。final.key的密钥格式为</p>

<pre><code>-----BEGIN RSA PRIVATE KEY-----  
......  
-----END RSA PRIVATE KEY-----  
</code></pre>

<p><strong>修改weblogic停止脚本</strong></p>

<p>需要修改weblogic的停止脚本“stopWebLogic.xx”，将ADMIN_URL字段的“t3”改为“t3s”，并在java调用weblogic.WLST类的JVM启动参数中加入“-Dweblogic.security.TrustKeyStore=DemoTrust”，使weblogic在调用停止脚本时使用演示证书，否则会出现证书不被信任的错误。</p>

<h3>使用自定义证书进行分析(方法二)</h3>

<p><strong>生成自定义密钥库</strong></p>

<p>使用以下命令生成自定义密钥库。</p>

<pre><code>#!bash
set keystore=keystore.jks
set alias=server
set pwd=123456
set url=url-test
set validity=7300

keytool -genkey -alias %alias% -keyalg RSA -keysize 2048 -keystore %keystore% -storetype jks -storepass %pwd% -keypass %pwd% -dname "CN=%url%, OU=companyName, O=companyName, L=cityName, ST=provinceName, C=CN" -validity %validity%
</code></pre>

<p>生成的密钥库名称为keystore.jks，密钥库密码与私钥密码均为“123456”。</p>

<p><strong>使weblogic使用指定的密钥库</strong></p>

<p>将上述步骤生成的密钥库文件keystore.jks复制到weblogic的domain目录中。</p>

<p>登录weblogic控制台，在AdminServer的密钥库界面，选择密钥库类型为“定制标识和 Java 标准信任”(Custom Identity and Java Standard Trust)，定制标识密钥库输入“keystore.jks”，定制标识密钥库类型输入“JKS”，定制标识密钥库密码短语与确认定制标识密钥库密码短语输入“123456”，保存上述修改。</p>

<p><img src="http://static.wooyun.org//drops/20160315/201603150627185954986.png" alt="" /></p>

<p>在AdminServer的SSL界面，私有密钥别名输入“server”，私有密钥密码短语与确认私有密钥密码短语输入“123456”。</p>

<p><img src="http://static.wooyun.org//drops/20160315/201603150627192303396.png" alt="" /></p>

<p>使用HTTPS对应的URL打开weblogic控制台，确保可以正常登录，查看证书信息如下。</p>

<p><img src="http://static.wooyun.org//drops/20160315/2016031506272110876106.png" alt="" /></p>

<p><img src="http://static.wooyun.org//drops/20160315/20160315062723102721111.png" alt="" /></p>

<p><strong>将自定义证书导入java信任密钥库中</strong></p>

<p>在上一步骤中可以看到Java标准信任密钥库对应的文件为weblogic的JDK目录中的“jdk\jre\lib\security\cacerts”文件，密钥类型也是JKS。</p>

<p>当weblogic作为SSL客户端连接服务器时，会检查服务器的证书链是否与weblogic的JDK目录中的cacerts文件匹配。</p>

<p>需要将自定义证书的公钥导入weblogic的JDK目录中的cacerts文件中，否则在调用weblogic停止脚本时，会由于证书不受信任而失败。</p>

<p>使用以下命令导出自定义证书的公钥。</p>

<pre><code>#!bash
set keystore=keystore.jks
set alias=server
set pwd=123456
set exportcert=export.cer

keytool -export -alias %alias% -keystore %keystore% -file %exportcert% -storepass %pwd%
</code></pre>

<p>导出的公钥文件为export.cert。</p>

<p>使用以下命令将公钥导入weblogic的JDK目录的cacerts文件中，在导入前需要备份cacerts。cacerts密钥库的默认密码为changeit，可进行修改。</p>

<pre><code>#!bash
set keystore=cacerts
set alias=server
set pwd=changeit
set cert=export.cer

keytool -import -alias %alias% -keystore %keystore% -trustcacerts -storepass %pwd% -file %cert%
</code></pre>

<p><strong>生成自定义证书的私钥文件</strong></p>

<p>使用以下命令生成自定义证书的私钥文件。</p>

<pre><code>#!bash
set keystore=keystore.jks
set tmp_p12=tmp.p12

set storepass=123456
set keypass=123456
set alias=server
set pwd_new=123456

keytool -importkeystore -srckeystore %keystore% -destkeystore %tmp_p12% -srcstoretype JKS -deststoretype PKCS12 -srcstorepass %storepass% -deststorepass %pwd_new% -srcalias %alias% -destalias %alias% -srckeypass %keypass% -destkeypass %pwd_new% 

set out_pem=tmp.rsa.pem
set final_pem=final.key

openssl pkcs12 -in %tmp_p12% -nodes -out %out_pem% -passin pass:%pwd_new%
openssl rsa -in %out_pem% -check &gt; %final_pem% 
</code></pre>

<p>最终生成的final.key即为自定义证书的私钥文件。</p>

<p><strong>修改weblogic停止脚本</strong></p>

<p>需要修改weblogic的停止脚本“stopWebLogic.xx”，将<code>ADMIN_URL</code>字段的“<code>t3</code>”改为“<code>t3s</code>”，并在java调用weblogic.WLST类的JVM启动参数中加入“<code>-Dweblogic.security.TrustKeyStore=DemoTrust</code>”。</p>

<p>除了以上修改外，还需在停止脚本的JVM启动参数中加入“<code>-Dweblogic.security.SSL.ignoreHostnameVerification=true</code>”，避免因自定义证书中的地址与停止脚本实际访问的ssl服务的地址不一致而出现错误。</p>

<h3>调用weblogic停止脚本并抓包</h3>

<p>前文中已将weblogic的停止脚本“stopWebLogic.xx”中的访问链接改为t3s协议，会使用SSL协议进行通信。</p>

<p>需要调用weblogic的停止脚本并进行抓包。由于停止脚本会与同一台机器的weblogic通信，在Linux环境中抓包较为方便，需要使用tcpdump对Loopback对应的网卡进行抓包。</p>

<h3>使用Wireshark解密SSL通信数据</h3>

<p>前文已生成了weblogic的私钥文件，并对weblogic停止脚本调用过程进行了抓包，可以使用Wireshark解密对应的SSL通信数据。</p>

<p>首先在Wireshark中设置需要使用的私钥文件，打开Wireshark菜单的“Edit->Preferences”，打开“Protocols->SSL”，点击“RSA keys list”旁的“Edit”按钮，如下图。</p>

<p><img src="http://static.wooyun.org//drops/20160315/2016031506272495624126.png" alt="" /></p>

<p>添加一行配置，IP为weblogic服务器的IP，Port为weblogic的SSL监听端口，Protocol为tcp，Key File为之前已生成的weblogic的SSL证书的私钥文件。</p>

<p><img src="http://static.wooyun.org//drops/20160315/2016031506272657020136.png" alt="" /></p>

<p>使用Wireshark打开抓包文件，可以看到原本为加密形式的通信数据有部分已被解密，找到T3协议头相关数据，可以看到停止脚本向weblogic发送的T3协议头以“t3s”开头。</p>

<p><img src="http://static.wooyun.org//drops/20160315/2016031506272936985145.png" alt="" /></p>

<p>服务器返回的数据如下。</p>

<p><img src="http://static.wooyun.org//drops/20160315/2016031506273233304154.png" alt="" /></p>

<p><img src="http://static.wooyun.org//drops/20160315/2016031506273340499163.png" alt="" /></p>

<p><img src="http://static.wooyun.org//drops/20160315/2016031506273530882173.png" alt="" /></p>

<p>费了老大的劲，才发现原来<strong>weblogic开放HTTPS服务后，t3协议头的前几个字节由“t3”变成了“t3s”</strong>。</p>

<p>以上步骤在Linux环境的weblogic 10.3.4测试成功。</p>

<h3>JAVA反序列化漏洞调用过程</h3>

<p>当weblogic开放HTTPS服务时，JAVA反序列化漏洞的调用过程如下。</p>

<pre><code>#!bash
at org.apache.commons.collections.functors.InvokerTransformer.transform(InvokerTransformer.java:132)  
at org.apache.commons.collections.functors.ChainedTransformer.transform(ChainedTransformer.java:122)  
at org.apache.commons.collections.map.TransformedMap.checkSetValue(TransformedMap.java:203)  
at org.apache.commons.collections.map.AbstractInputCheckedMapDecorator$MapEntry.setValue(AbstractInputCheckedMapDecorator.java:191)  
at sun.reflect.annotation.AnnotationInvocationHandler.readObject(AnnotationInvocationHandler.java:334)  
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)  
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)  
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)  
at java.lang.reflect.Method.invoke(Method.java:597)  
at java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:974)  
at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1849)  
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1753)  
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329)  
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:351)  
at weblogic.rjvm.InboundMsgAbbrev.readObject(InboundMsgAbbrev.java:65)  
at weblogic.rjvm.InboundMsgAbbrev.read(InboundMsgAbbrev.java:37)  
at weblogic.rjvm.MsgAbbrevJVMConnection.readMsgAbbrevs(MsgAbbrevJVMConnection.java:283)  
at weblogic.rjvm.MsgAbbrevInputStream.init(MsgAbbrevInputStream.java:210)  
at weblogic.rjvm.MsgAbbrevJVMConnection.dispatch(MsgAbbrevJVMConnection.java:498)  
at weblogic.rjvm.t3.MuxableSocketT3.dispatch(MuxableSocketT3.java:330)  
at weblogic.socket.BaseAbstractMuxableSocket.dispatch(BaseAbstractMuxableSocket.java:298)  
at weblogic.socket.SSLFilterImpl.dispatch(SSLFilterImpl.java:258)  
at weblogic.socket.SocketMuxer.readReadySocketOnce(SocketMuxer.java:950)  
at weblogic.socket.SocketMuxer.readReadySocket(SocketMuxer.java:898)  
at weblogic.socket.PosixSocketMuxer.processSockets(PosixSocketMuxer.java:130)  
at weblogic.socket.SocketReaderRequest.run(SocketReaderRequest.java:29)  
at weblogic.socket.SocketReaderRequest.execute(SocketReaderRequest.java:42)  
at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:145)  
at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:117)
</code></pre>

<h1>0x03 如何控制开放HTTPS服务的weblogic服务器</h1>

<hr />

<h3>如何发送T3协议数据</h3>

<p>利用weblogic的JAVA反序列化漏洞时，必须向weblogic发送T3协议头。<strong>当weblogic开放HTTPS服务时，向其发送的T3协议头应以“t3s”开头。向weblogic发送数据时应使用SSL协议，且不应对服务器的证书进行验证。</strong></p>

<p>无论weblogic开放HTTP服务还是HTTPS服务，在向weblogic发送利用JAVA反序列化漏洞的序列化数据时，数据内容不需要改变。</p>

<h3>如何调用weblogic的RMI服务</h3>

<p>可以利用weblogic的JAVA反序列化数据使weblogic在服务器生成指定的jar文件并加载，在jar文件中开启weblogic的RMI服务，可以从公网直接调用，能够控制服务器。</p>

<p>当weblogic开放HTTPS服务时，调用weblogic的RMI服务时有几点需要进行修改。</p>

<ol>
<li>在调用weblogic的RMI服务时，使用的URL应改为以“t3s”开头；</li>
<li>在调用weblogic的RMI服务时，客户端需要引入weblogic.jar。使用t3s协议时，weblobic.jar会尝试从当前目录读取weblogic授权文件license.bea，需要保证weblogic.jar能正确地读取该文件；</li>
<li>weblogic.jar中会对服务器证书进行验证，判断其是否为可信证书。由于可能遇到服务器的证书未经过CA认证，因此需要修改证书验证的相关代码，忽略证书未经认证的问题；</li>
<li>JVM启动参数需要增加“<code>-Dweblogic.security.SSL.ignoreHostnameVerification=true</code>”，避免因自定义证书中的地址与停止脚本实际访问的ssl服务的地址不一致而出现错误。</li>
</ol>

<h1>0x04 可行的漏洞修复方法</h1>

<h3>将SSL服务转移至其他设备</h3>

<p>将SSL服务转移至weblogic服务器外层的设备实现，如SSL网关、负载均衡、单独部署的web代理等，将HTTP请求转发至weblogic，可以修复JAVA反序列化漏洞。</p>

<table>
  <tr>
    <td>
      优点
    </td>
    
    <td>
      缺点
    </td>
  </tr>
  
  <tr>
    <td>
      对系统影响小，不需测试对现有系统功能的影响
    </td>
    
    <td>
      需要对SSL证书进行格式转换；需要购买设备；无法防护从内网发起的JAVA反序列化漏洞攻击
    </td>
  </tr>
</table>

<h3>将SSL服务转移至weblogic服务器的web代理</h3>

<p>在weblogic所在服务器安装web代理应用，如apache、nginx等，将SSL服务转移至web代理应用，使web代理监听原有的weblogic监听端口，并将HTTP请求转发给本机的weblogic，可以修复JAVA反序列化漏洞。</p>

<table>
  <tr>
    <td>
      优点
    </td>
    
    <td>
      缺点
    </td>
  </tr>
  
  <tr>
    <td>
      对系统影响小，不需测试对现有系统功能的影响；不需要购买设备
    </td>
    
    <td>
      需要对SSL证书进行格式转换；无法防护从内网发起的JAVA反序列化漏洞攻击；会增加服务器的性能开销
    </td>
  </tr>
</table>

<h3>将SSL服务转移至weblogic服务器的web代理并修改weblogic的监听IP</h3>

<p>将weblogic的监听地址修改为“127.0.0.1”或“localhost”，只允许本机访问weblogic服务。</p>

<p>在weblogic所在服务器安装web代理应用，如apache、nginx等，将SSL服务转移至web代理应用，使web代理监听原有的weblogic监听端口，并将HTTP请求转发给本机的weblogic，可以修复JAVA反序列化漏洞。web代理的监听IP需设置为“0.0.0.0”，否则其他服务器无法访问。</p>

<p>需要将weblogic停止脚本中的ADMIN_URL参数中的IP修改为“127.0.0.1”或“localhost”，否则停止脚本将不可用。</p>

<table>
  <tr>
    <td>
      优点
    </td>
    
    <td>
      缺点
    </td>
  </tr>
  
  <tr>
    <td>
      对系统影响小，不需测试对现有系统功能的影响；不需要购买设备；能够防护从内网发起的JAVA反序列化漏洞攻击
    </td>
    
    <td>
      需要对SSL证书进行格式转换；会增加服务器的性能开销
    </td>
  </tr>
</table>

<h3>修改weblogic的代码</h3>

<p>weblogic处理T3S协议的类为“weblogic.rjvm.t3.MuxableSocketT3S”，继承自“weblogic.rjvm.t3.MuxableSocketT3”类，且MuxableSocketT3S类中没有对dispatch方法进行重写，因此可以采用与<a href="http://drops.wooyun.org/web/13470" title="修复weblogic的JAVA反序列化漏洞的多种方法">修复weblogic的JAVA反序列化漏洞的多种方法</a>中“修改weblogic的代码”部分相同的修复方法。具体步骤略。</p>

<table>
  <tr>
    <td>
      优点
    </td>
    
    <td>
      缺点
    </td>
  </tr>
  
  <tr>
    <td>
      不需要对SSL证书进行格式转换；对系统影响小，不需测试对现有系统功能的影响；不需要购买设备；能够防护从内网发起的JAVA反序列化漏洞攻击；不会增加服务器的性能开销
    </td>
    
    <td>
      存在商业风险，可能给oracle的维保带来影响
    </td>
  </tr>
</table>

<h1>0x05 结束</h1>

<hr />

<p>无论weblogic服务器开放HTTP服务还是HTTPS服务，都是有可能利用JAVA反序列化漏洞控制服务器的。JAVA反序列化漏洞的影响，应该会持续很长的时间。</p>      </p>
    
			</body>
		</html>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          